﻿/*   
    Copyright (C) 2009 Galaktika Corporation ZAO

    This file is a part of Galaktika.BusinessMonitor
 
    Galaktika.BusinessMonitor is a free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
      
    You should have received a copy of the GNU General Public License
    along with Galaktika.BusinessMonitor.  If not, see <http://www.gnu.org/licenses/>.
  
    If GPL v.3 is not suitable for your products or company,
    Galaktika Corp provides Galaktika.BusinessMonitor under a flexible commercial license
    designed to meet your specific usage and distribution requirements.
    If you have already obtained a commercial license from Galaktika Corp,
    you can use this file under those license terms.
*/

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace Galaktika.BI.Silverlight.Controls
{
    using Galaktika.BI.Runtime;
    using Galaktika.BI.Runtime.Services;
    using Galaktika.BI.Extensibility.Dom;
    using Galaktika.BI.Silverlight.Intermediate;
    using Galaktika.BI.Silverlight.Services;

    public class Hyperlink : HyperlinkButton, IBindableObject, IEditableObject
    {
        public Hyperlink()
        {
        }

        public string AText
        {
            get
            {
                return base.Content as string;
            }
            set
            {
                base.Content = value;
            }
        }

        public Color AForeColor { get; set; }

        public Color ABackColor { get; set; }

        public Color ABackColor2 { get; set; }

        public Font AFont { get; set; }

        public BorderStyles ABorderStyle { get; set; }

        public bool AShowToolTips { get; set; }

        public string AToolTipText { get; set; }

        public Cursor ACursor
        {
            get
            {
                return base.Cursor;
            }
            set
            {
                base.Cursor = value;
            }
        }

        public string AImage { get; set; }

        public ImageLocation AImageAlignment { get; set; }

        public BrickActionInvoker AActionInvoker { get; set; }

        protected override void OnClick()
        {
            base.OnClick();          

            if (this.AActionInvoker != null && this.AActionInvoker.Action != null)
            {
                ScriptEngine.Execute(this, this.AActionInvoker);
                
            }
        }



        #region IBindableObject Members

        public IBindingContext Context { get; set; }

        private IDictionary<string, IBindingManager> m_Bindings;
        public System.Collections.Generic.IDictionary<string, IBindingManager> Bindings
        {
            get
            {
                if (m_Bindings == null)
                {
                    m_Bindings = new SafeDictionary<string, IBindingManager>();
                }

                return m_Bindings;
            }
        }
        #endregion

        #region IEditableObject Members

        public void BeginEdit()
        {
           
        }

        public void CancelEdit()
        {
            
        }

        public void EndEdit()
        {
            if (this.AShowToolTips)
            {
                ToolTipService.SetToolTip(this, new StyledToolTip() { Content = this.AToolTipText });
            }
            if (this.AFont != null)
            {
                base.FontFamily = new FontFamily(this.AFont.FamilyName);
                base.FontSize = this.AFont.Size;
                if (this.AFont.Italic)
                {
                    base.FontStyle = FontStyles.Italic;
                }
                if (this.AFont.Bold)
                {
                    base.FontWeight = FontWeights.Bold;
                }
            }            
            Color emptyColor = Color.FromArgb(0, 0, 0, 0);
            if (this.AForeColor != emptyColor)
            {
                base.Foreground = new SolidColorBrush(this.AForeColor);
            }
            if (this.ABackColor != emptyColor)
            {
                if (this.ABackColor2 != emptyColor)
                {
                    GradientStopCollection coll = new GradientStopCollection();
                    coll.Add(new GradientStop() { Color = this.ABackColor });
                    coll.Add(new GradientStop() { Color = this.ABackColor2 });
                    base.Background = new LinearGradientBrush(coll, 45.0);
                }
                else
                {
                    base.Background = new SolidColorBrush(this.ABackColor);
                }
            }
            switch (this.ABorderStyle)
            {
                case BorderStyles.HotFlat:
                case BorderStyles.Flat:
                case BorderStyles.NoBorder:
                    base.BorderThickness = new Thickness(0.0);
                    break;
                default:
                    break;

            }
            base.Cursor = Cursors.Hand;
        }

        #endregion
    }
}
